package com.stefanini.pe.bbva.bp.in.bo.impl;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.stefanini.pe.bbva.bp.in.bo.iface.ClienteBOIface;
import com.stefanini.pe.bbva.bp.in.dao.iface.ClienteDAOIface;
import com.stefanini.pe.bbva.bp.in.to.Cliente;
import com.stefanini.pe.bbva.bp.in.to.NoCliente;
import com.stefanini.pe.bbva.bp.in.to.UsuarioAsesor;
import com.stefanini.pe.bbva.bp.in.to.UsuarioSesion;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Service("clienteBO")
public class ClienteBOImpl implements ClienteBOIface {
	
	@Autowired
	private ClienteDAOIface clienteDAOIface;

	public List listarClientes(Cliente oClienteDatos) throws Exception{
		return clienteDAOIface.listarClientes(oClienteDatos);
	}
	
	public List<NoCliente> listarNoClientes(NoCliente oClienteDatos) throws Exception{
		return clienteDAOIface.listarNoClientes(oClienteDatos);
	}
	
	public List<NoCliente> getDatosBasicosNoCliente(NoCliente oCliente) throws Exception{
		return clienteDAOIface.getDatosBasicosNoCliente(oCliente);
	}
	
	public List<Cliente> listarPosicionActual(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarPosicionActual(oCliente);
	}

	public List<Cliente> listarDatosPerfilInversion(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarDatosPerfilInversion(oCliente);
	}

	public List<HashMap> listarDatosAdicionales(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarDatosAdicionales(oCliente);
	}

	public List<HashMap> listarSituacionActualCatActivos(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarSituacionActualCatActivos(oCliente);
	}

	public List<HashMap> listarDatosBasicos(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarDatosBasicos(oCliente);
	}
	
	public HashMap crearNoCliente(NoCliente noCliente, UsuarioSesion usuario){
		return clienteDAOIface.crearNoCliente(noCliente, usuario);
	}
	
	public HashMap editarNoCliente(NoCliente noCliente, UsuarioSesion usuario){
		return clienteDAOIface.editarNoCliente(noCliente, usuario);
	}

	public List<HashMap> listarDisXTipoProductoXMoneda(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarDisXTipoProductoXMoneda(oCliente);
	}
	
	public List<HashMap> listarDisXTipoProducto(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarDisXTipoProducto(oCliente);
	}
	
	public List<HashMap> listarExpEspActivosParticulares(Cliente oCliente) throws Exception{
		return clienteDAOIface.listarExpEspActivosParticulares(oCliente);
	}
	
	public List<HashMap> listarDetExpEspActivosParticulares(Cliente oCliente,String codidlimitervrf) throws Exception{		
		return clienteDAOIface.listarDetExpEspActivosParticulares(oCliente, codidlimitervrf);
		
	}
	
	public List listarEjecutivosDeClientes(Cliente objCliente) throws Exception{
		return clienteDAOIface.listarEjecutivosDeClientes(objCliente);
	}

	public List<Cliente> listarClienteNoAsignados(Cliente oCliente) throws Exception{
		oCliente.setNombres(oCliente.getNombres() == null? "" : oCliente.getNombres());
		oCliente.setNrodoc(oCliente.getNrodoc() == null? "" : oCliente.getNrodoc());
		return clienteDAOIface.listarClienteNoAsignados(oCliente);
	}

	public void grabarClientesAsignados(UsuarioAsesor usuarioAsesor, List clientesEjecutivo, List clientesAsignados) throws Exception{
		StringBuffer codClientes=new StringBuffer();
		for (Iterator iter = clientesEjecutivo.iterator(); iter.hasNext();) {
			HashMap element = (HashMap) iter.next();
			codClientes.append(element.get("codcliente")).append(",");
		}
		for (Iterator iter = clientesAsignados.iterator(); iter.hasNext();) {
			Cliente element = (Cliente) iter.next();
			codClientes.append(element.getCodcliente()).append(",");
		}
		clienteDAOIface.grabarClientesAsignados(usuarioAsesor, Util.depuraComa(codClientes.toString()));
	}
	
	public HashMap<String,Object> updateCamposBasicosCliente(Cliente cliente) throws Exception{
		return clienteDAOIface.updateCamposBasicosCliente(cliente);
	}
	
}
